iT邦幫忙

2022 iThome 鐵人賽

DAY 14
1
自我挑戰組

三十天,PG與我系列 第 14

SQL 集合操作

  • 分享至 

  • xImage
  •  

使用集合操作的先決條件:
1.有兩組query
2.兩組query回傳的欄位數量必須一樣,資料型態必須類似,且欄位的順序也要一樣

UNION/UNION ALL

UNION取兩組查詢結果的聯集,和UNION ALL的差別是UNION會將重複的結果給過濾掉,類似SELECT DISTINCT的作用,而UNION ALL則是單純將結果合併在一起,會跑得稍微快一點。
例子:

query 1:篩選出有預定過桌球場的客戶,共有26人
https://ithelp.ithome.com.tw/upload/images/20220914/20114934axkNhRGlqs.png
query 2:篩選出有預定過撞球檯的客戶,共有28人
https://ithelp.ithome.com.tw/upload/images/20220914/201149345SaVEUSxu0.png

使用UNION ALL取兩者之間的聯集,兩邊都有的紀錄重複出現,共54筆
https://ithelp.ithome.com.tw/upload/images/20220914/20114934d7qMwZq4WN.png
使用UNION取兩者之間的聯集並過濾重複的紀錄,回傳30筆資料
https://ithelp.ithome.com.tw/upload/images/20220914/20114934xX0Tpmd6hH.png

INTERSECT/INTERSECT ALL

取兩邊都有出現的資料行,INTERSECT ALL則是會將在任意一條query中多次出現的資料行加入INTERSECT的結果中。
https://ithelp.ithome.com.tw/upload/images/20220914/20114934hc3tO9vRBE.png
將query 1 & 2的結果取交集,這裡兩種情況都會回傳24筆資料。

EXCEPT/EXCEPT ALL

取差集,可以理解成第一條query的結果扣除在第二條query結果中也出現的內容。
https://ithelp.ithome.com.tw/upload/images/20220914/20114934S2tUdLDORs.png
從先前的結果得知query 1跟query 2有24筆相同的紀錄,所以query 1的26筆刪去相同的24筆之後=兩筆,正確無誤。


上一篇
SQL語法中的邏輯判斷
下一篇
PostgreSQL Index機制
系列文
三十天,PG與我30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言